#include<iostream>
#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>

//我们来玩一个简单的条件变量代码

pthread_mutex_t mutex;
pthread_cond_t cond;

void * fun1(void* arvgs)
{
     while(1)
     {
        //pthread_mutex_lock(&mutex);                 // 不是临界区不要加锁，两个共用一把锁早就全卡死了
        pthread_cond_wait(&cond,&mutex);
        std::cout << "我是消费者，我已经成功的被唤醒，我要开始去购物了" << std::endl;
        //pthread_mutex_unlock(&mutex);
     }
}

void * fun2(void* arvgs)
{
     while(1)
     {
       // pthread_mutex_lock(&mutex);
        pthread_cond_signal(&cond);
        sleep(1);
        //pthread_mutex_unlock(&mutex);
     }
}

int main()
{
    pthread_mutex_init(&mutex,nullptr);
    pthread_cond_init(&cond,nullptr);
 
    pthread_t consumer,producer;
    pthread_create(&consumer,nullptr,fun1,nullptr);
    pthread_create(&producer,nullptr,fun2,nullptr);

    while(1);

    pthread_join(consumer,nullptr);
    pthread_join(producer,nullptr);
 
    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&cond);

    return 0;
}